Over the past decades, the Internet has evolved from a special purpose collection of military and academic networks to a vital carrier of communications for many people around the world. The widespread use of email clients and web browsers helped fuel the Internet's use by the general populace. Newer applications such as file sharing and instant messaging have further increased the traffic on the Internet.
The Internet is built upon the Internet Protocol (IP). An important portion of IP traffic on the Internet uses the Transport Control Protocol (TCP) to provide reliable, connection oriented data transmissions. The protocols behind many user applications such as email and web browsing rely on TCP/IP.
Besides ensuring data reliability, TCP also acts to demultiplex incoming IP data. For example, a computer may have a single, physical network connection that includes simultaneous virtual connections to various remote hosts. The virtual connections are used by one or more applications running on the computer to communicate with those remote hosts. The task of demultiplexing incoming data refers to delivering data received from the IP to the appropriate virtual connection.
The IP protocol ensures best-effort data delivery to the computer, but is not concerned with what happens to the data once it is delivered. Transport protocols such as TCP and Universal Datagram Protocol (UDP) deal with, among other things, deciding which connection should receive the incoming data, thus ensuring the data is delivered to the appropriate application.
TCP and UDP accomplish this demultiplexing by the use of port numbers. Ports numbers are represented by 16-bit values embedded in the transport headers of each data packet. For each connection, a port is associated with both the local and remote machines. The TCP examines the destination port of each incoming TCP/IP packet and delivers the data to the virtual connection associated with that port.
A majority of the approximately 64,000 possible port numbers on any computer can be dynamically allocated for use for incoming and outgoing connections. The TCP/IP protocol was designed at a time when hundreds of simultaneous virtual connections between computers was the most anyone could imagine needing.
However, the explosion of Internet applications such as peer-to-peer (P2P) messaging has required that servers maintain a very large number of simultaneous TCP connections to message clients in order to resolve issues of firewall transparency and to minimize latencies in the message path. It is possible that a collection of applications could exhaust the TCP connections that are supported with 16-bit port numbers.